package com.neu.table;

import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.table.AbstractTableModel;

import com.neu.pojo.Patient;
import com.neu.pojo.Worker;
import com.neu.service.IpatientService;
import com.neu.service.impl.PatientService;

public class PatientTable extends AbstractTableModel{//展示患者信息
	//fields
	private String[] colNames = {"","姓名","出生日期","性别","身份证号","联系电话","紧急联系人","紧急联系人电话",""};//表头
	private Object[][] data;//数据
	//service
	private IpatientService patientService = PatientService.getInstance();
	
	//constructor
	public PatientTable() {
		ArrayList<Patient> patients = patientService.list();//得到所有患者
		
		if(patients != null&& patients.size() != 0) {
			this.data = new Object[patients.size()][colNames.length];//实例化数组
			for(int i=0;i<patients.size();i++) {//加载数据
				data[i][0] = new Boolean(false);//复选框
				data[i][1] = patients.get(i).getName();//姓名
				data[i][2] = patients.get(i).getBirthday();//出生日期
				data[i][3] = patients.get(i).getSex();//性别
				data[i][4] = patients.get(i).getId();//身份证号
				data[i][5] = patients.get(i).getPhone();//联系电话
				data[i][6] = patients.get(i).getCloseName();//紧急联系人
				data[i][7] = patients.get(i).getClosePhone();//紧急联系人电话
				data[i][8] = "";
			}
		}else {
			this.data = new Object[0][0];
		}
	}
	
	
	//返回结果行数
	@Override
	public int getRowCount() {
		return this.data.length;
	}

	//返回结果列数
	@Override
	public int getColumnCount() {
		return this.colNames.length;
	}
	
	//获得对应列名
	@Override
	public String getColumnName(int column) {
		return this.colNames[column];
	}

	//每列对应的类型
	@Override
	public Class<?> getColumnClass(int columnIndex) {
		return data[0][columnIndex].getClass();
	}
	
	//返回哪行哪列对应的数据
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		return data[rowIndex][columnIndex];
	}
	
	/**
	 * 哪列不能编辑
	 * 返回false 不可编辑
	 */
	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		if (columnIndex == 4) {		//编号不能编辑
			return false;
		} else
			return true;
	}
	
	//修改表格中的数据
	@Override
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		data[rowIndex][columnIndex] = aValue;
		/*修改表格数据后，显示改后结果*/
		fireTableCellUpdated(rowIndex, columnIndex);
	}

	@Override
	public void fireTableRowsDeleted(int firstRow, int lastRow) {
		super.fireTableRowsDeleted(firstRow, lastRow);
	}
	
	public int delete() {
		int cnt=0;//表示要删除员工的个数
        for (int i=0;i<getRowCount();i++) {
			if ((boolean)data[i][0]) {
				System.out.println(patientService.delete(new Patient((String) data[i][4])));//身份证号唯一
				cnt+=1;
			}
        }
        if(cnt == 0) {//没有选中
        	return 0;
        }
        //文件中数据已经更改
        fireTableDataChanged();
	    Object[][] data2=new Object[getRowCount()-cnt][colNames.length];//创建减少了cnt行的数据数组
	    
	    int j=0;
	    for (int i=0;i<getRowCount();i++) {//将未选中的数据保留，选中的丢弃
	    	
			if (getValueAt(i,0).equals(false)) {//如果没选中
				data2[j][0]=new Boolean(false);//加载数据
				data2[j][1]=data[i][1];
				data2[j][2]=data[i][2];
				data2[j][3]=data[i][3];
				data2[j][4]=data[i][4];
				data2[j][5]=data[i][5];
				data2[j][6]=data[i][6];
				data2[j][7]=data[i][7];
				j++;
			}	
		}
	    data=new Object[getRowCount()-cnt][colNames.length];//覆盖data
	    data=data2;
	    return cnt;//返回删除的行数
	}
}
